package org.example.cloud.others.controller;


import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.TbkDgMaterialOptionalUpgradeRequest;
import com.taobao.api.response.TbkDgMaterialOptionalUpgradeResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.example.cloud.others.pojo.MaterialInformationBo;
import org.example.cloud.others.pojo.MaterialReturnInformationBo;
import org.example.cloud.others.utils.AccessToken;
import org.example.cloud.others.utils.CheckUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@Slf4j
@RestController
//@ApiResource(name = "小店管理")
@RequestMapping("/officialAccount")
public class OfficialAccountController {

    private String url = "http://gw.api.taobao.com/router/rest";

    private String appkey = "33354099";
    private String secret = "3a3c458abcf7a210519f3014af0bd7be";
    private Long adzoneId = 111826550423L;
    private String pid ="mm_xxxx_xxxx_111826550423";
    private AccessToken accessToken;
    /**
     * 查看微信配置表详情
     *
     * @author huanzi
     * @date 2020/3/25 14:00
     */
    @GetMapping(name = "查看微信配置表详情", value = "/test")
    public void detail(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("test is in");
        String signature = request.getParameter("signature");
        String timestamp = request.getParameter("timestamp");
        String nonce = request.getParameter("nonce");
        String echostr = request.getParameter("echostr");
        PrintWriter out = null;
        try {
            out = response.getWriter();
            if (CheckUtil.checkSignature(signature, timestamp, nonce)) {
                out.write(echostr);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            out.close();
        }
    }

    /**
     * 淘宝客【推广者】商品物料获取
     *
     * @author huanzi
     * @date 2020/3/25 14:00
     *
     * 权限包ID: 27939
     */
    @GetMapping(name = "淘宝客【推广者】商品物料获取", value = "/getMaterialOptional")
    public MaterialReturnInformationBo getMaterialOptional(String key, Integer page, Integer size){
       log.info("key: "+ key+"|page: "+page+"|siza: "+size);
        String keyWord=null;
        if(!Strings.isEmpty(key)){
             keyWord = key.trim();
        }
        if (Strings.isEmpty(keyWord)){
            keyWord="口罩";
        }
        if (null==page||page==0||page<0){
            page=1;
        }
        if (null==size||size==0||size<0){
            size=20;
        }

        TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);
        TbkDgMaterialOptionalUpgradeRequest req = new TbkDgMaterialOptionalUpgradeRequest();
        req.setPageSize(Long.parseLong(String.valueOf(size)));
        req.setPageNo(Long.parseLong(String.valueOf(page)));

        req.setSort("match");
        req.setQ(keyWord);//搜索关键词
        req.setHasCoupon(true);//是否有优惠卷  true:有  false：没有
        req.setAdzoneId(adzoneId);//推广者的adzoneId
        TbkDgMaterialOptionalUpgradeResponse response = null;
        try {
            response = client.execute(req);
        } catch (ApiException e) {
            log.info("ApiException:");
            e.printStackTrace();
            return null;
        }
        String body = response.getBody();
        List<TbkDgMaterialOptionalUpgradeResponse.MapData> resultList = response.getResultList();
        Long totalResults = response.getTotalResults();     //搜索到符合条件的结果总数
        String uvidMsg = response.getUvidMsg();             //uvid结果信息，传入但未使用uvid时会返回原因
        System.out.println(body);
        MaterialReturnInformationBo result = new MaterialReturnInformationBo();
        result.setNum(resultList.size()); //当前页内搜索个数
        result.setOut("tb");//暂时默认淘宝
        result.setNext(page+1);//本地化-lbs分页标识，请在下一次翻页时作为入参传入
        result.setKey(keyWord);//搜索关键字
        result.setStatus(200);
        List<MaterialInformationBo> content = copyBean(resultList);
        result.setContent(content);
//        private String yhjurl; //链接到商品详情页的url
        return result;
    }


    @GetMapping(name = "查看微信配置表详情", value = "/accessToken")
    public void getAccessTokens() {
        String accessTokenTemp = accessToken.getAccessToken();
        System.out.println(accessTokenTemp);
    }

    @GetMapping(name = "获取搜索页", value = "/search")
    public String getSearch() {
        return "/index2.html";
    }

    public List<MaterialInformationBo> copyBean(List<TbkDgMaterialOptionalUpgradeResponse.MapData> resultList){
        List<MaterialInformationBo> content = new ArrayList<>();
        for (TbkDgMaterialOptionalUpgradeResponse.MapData officialAccount:resultList) {
            MaterialInformationBo materialInformationBo = new MaterialInformationBo();
            materialInformationBo.setTitle(officialAccount.getItemBasicInfo().getTitle()); //商品信息-商品标题
//            Integer userType = officialAccount.getUserType().intValue();// 0 :集市（普通淘宝店） 1：天猫
            materialInformationBo.setIstmall(1);//是否天猫1
            materialInformationBo.setItemid(officialAccount.getItemId());//物料id
            materialInformationBo.setId(officialAccount.getItemId());//物料id

            materialInformationBo.setShoptitle(officialAccount.getItemBasicInfo().getShopTitle());//店铺信息-店铺名称
            materialInformationBo.setIcon("http://huanzi.xyz/addons/bsht_tbk/res/images/logo_tb.png");//物料商图标地址
            BigDecimal reservePrice = new BigDecimal(officialAccount.getPricePromotionInfo().getReservePrice());//商品一口价(折扣前的划线价格)
            BigDecimal zkFinalPrice = new BigDecimal(officialAccount.getPricePromotionInfo().getZkFinalPrice());//商品折扣价(无折扣时为一口价  有折扣时 为折后价)？
            BigDecimal juanHou2 = new BigDecimal(officialAccount.getPricePromotionInfo().getFinalPromotionPrice());//促销信息-预估到手价(元)。若属于预售商品，付定金时间内，预估到手价价=定金+尾款的预估到手价
            List<TbkDgMaterialOptionalUpgradeResponse.FinalPromotionPathMapData> finalPromotionPathList = officialAccount.getPricePromotionInfo().getFinalPromotionPathList();
            String promotionFee="0";
            if (finalPromotionPathList!=null){
                promotionFee = finalPromotionPathList.get(0).getPromotionFee();//实际优惠价格  （默认取取第一个优惠价格）
            }
            BigDecimal couponAmount = new BigDecimal(promotionFee);//优惠价格
            BigDecimal couponStartFee = new BigDecimal(promotionFee);//优惠券起用门槛  无此字段  暂时用优惠价格替代

            BigDecimal juanHou=zkFinalPrice;
            if(couponStartFee.compareTo(zkFinalPrice)!=1){
                juanHou=zkFinalPrice.subtract(couponAmount);
            }
            materialInformationBo.setItemfee(zkFinalPrice.doubleValue());//原价格
            materialInformationBo.setItemfee2(juanHou.doubleValue());//卷后价(折扣价-优惠价格)
            materialInformationBo.setJiage2(couponAmount.doubleValue());//优惠价格
            materialInformationBo.setJiage(juanHou.doubleValue());//卷后价
            materialInformationBo.setQfee(couponAmount.doubleValue());//优惠价格
            materialInformationBo.setActid("");//actid  ???
/*            materialInformationBo.setItemmsell(Long.toString(officialAccount.getItemBasicInfo().getVolume()));//商品月销量(商品信息-30天销量；数据统计截止昨日非实时更新)*/
            materialInformationBo.setItemmsell(officialAccount.getItemBasicInfo().getTkTotalSales());;//商品信息-淘客30天推广量   由于阿里接口Volume字段无内容  暂时用推广销量替代

            String pictUrl = officialAccount.getItemBasicInfo().getPictUrl();//商品信息-商品主图
            List<String> smallImages = officialAccount.getItemBasicInfo().getSmallImages();//商品信息-商品小图列表
            String whiteImage = officialAccount.getItemBasicInfo().getWhiteImage();//商品信息-商品白底图
            materialInformationBo.setPic(pictUrl);
            String commissionRate = officialAccount.getPublishInfo().getIncomeInfo().getCommissionRate();//佣金比例 1550表示15.5%
            BigDecimal b1 =reservePrice.subtract(juanHou2);//优惠价
            BigDecimal b2 = new BigDecimal(commissionRate);
            BigDecimal b3 = new BigDecimal("10000");
            BigDecimal yongJin = b1.multiply(b2).divide(b3, 2, BigDecimal.ROUND_HALF_UP);
            materialInformationBo.setShouru_yongjin(yongJin.doubleValue());//推广者一单赚取的佣金
            materialInformationBo.setFl(yongJin.divide(new BigDecimal(10),2,BigDecimal.ROUND_HALF_UP).toString());//1/10佣金 (暂不使用此功能)
            materialInformationBo.setMaijia_id(Long.toString(officialAccount.getItemBasicInfo().getSellerId()));//商家id
            materialInformationBo.setPid(pid);
            String url = officialAccount.getPublishInfo().getClickUrl();//链接-宝贝推广链接
            String couponShareUrl = "https:"+officialAccount.getPublishInfo().getCouponShareUrl();//链接-宝贝+券二合一页面链接
//            String itemUrl = officialAccount.getItemUrl();//链接-宝贝地址  暂时此接口没有
            materialInformationBo.setYhjurl(couponShareUrl);
            content.add(materialInformationBo);
        }
        System.out.println("copybean 完成");
        return content;
    }


//        req.setStartDsr(10L);			商品筛选-店铺dsr评分。筛选大于等于当前设置的店铺dsr评分的商品0-50000之间
//        req.setPageSize(20L);			页大小，默认20，1~100
//        req.setPageNo(1L);				第几页，默认：１
//        req.setEndTkRate(1234L);			商品筛选-淘客收入比率上限(商品佣金比率+补贴比率)。如：1234表示12.34%
//                req.setStartTkRate(1234L);			商品筛选-淘客收入比率下限(商品佣金比率+补贴比率)。如：1234表示12.34%
//                req.setEndPrice(10L);			商品筛选-预估到手价范围上限。单位：元
//        req.setStartPrice(10L);			商品筛选-预估到手价范围下限。单位：元
//        req.setIsOverseas(false);			商品筛选-是否海外商品。true表示属于海外商品，false或不设置表示不限
//        req.setIsTmall(false);			商品筛选-是否天猫商品。true表示属于天猫商品，false或不设置表示不限
//        req.setSort("tk_rate_des");			排序_des（降序），排序_asc（升序），销量（total_sales），淘客收入比率（tk_rate）， 累计推广量（tk_total_sales），总支出佣金（tk_total_commi），预估到价格（final_promotion_price），匹配分（match）
//        req.setItemloc("杭州");			商品筛选-所在地
//        req.setCat("16,18");				商品筛选-后台类目ID。用,分割，最大10个
//        req.setQ("女装");				商品筛选-查询词；注意：使用标题精准搜索时，若无消费者比价场景ID2权限，当搜索结果只有一个商品时则出参不再提供商品推广链接和商品id字段，若搜索结果仍有多个商品，则正常出参。同时无消费者比价场景ID2权限，q参数也不再支持入参淘宝复制的商品链接进行搜索查询，仅支持入参含新商品id的淘宝客推广链接如uland链接进行搜索查询
//        req.setMaterialId(80309L);			物料id，不传时默认物料material_id=80309；如果直接对消费者投放，可使用官方个性化算法优化的搜索物料material_id=17004（注意：若物料id=17004没查询到结果则出系统默认物料id=80309的查询结果）
//        req.setHasCoupon(false);			优惠券筛选-是否有优惠券。true表示该商品有优惠券，false或不设置表示不限
//        req.setIp("13.2.33.4");			ip参数影响邮费获取，如果不传或者传入不准确，邮费无法精准提供
//        req.setAdzoneId(12345678L);			推广位id，mm_xxx_xxx_12345678三段式的最后一段数字（登录pub.alimama.com推广管理-推广位管理中查询）
//        req.setNeedFreeShipment(true);		商品筛选-是否包邮。true表示包邮，false或不设置表示不限
//        req.setNeedPrepay(true);			商品筛选-是否加入消费者保障。true表示加入，false或不设置表示不限
//        req.setIncludePayRate30(true);		商品筛选-成交转化是否高于行业均值。True表示大于等于，false或不设置表示不限
//        req.setIncludeGoodRate(true);		商品筛选-好评率是否高于行业均值。True表示大于等于，false或不设置表示不限
//        req.setIncludeRfdRate(true);			商品筛选-退款率是否低于行业均值。True表示大于等于，false或不设置表示不限
//        req.setNpxLevel(2L);			商品筛选-牛皮癣程度。取值：1不限，2无，3轻微
//        req.setDeviceEncrypt("MD5");			智能匹配-设备号加密类型：MD5；使用智能推荐请先签署协议https://pub.alimama.com/fourth/protocol/common.htm?key=hangye_laxin
//        req.setDeviceValue("xxx");			智能匹配-设备号加密后的值（MD5加密需32位小写）；使用智能推荐请先签署协议https://pub.alimama.com/fourth/protocol/common.htm?key=hangye_laxin
//        req.setDeviceType("IMEI");			智能匹配-设备号类型：IMEI，或者IDFA，或者UTDID（UTDID不支持MD5加密），或者OAID；使用智能推荐请先签署协议https://pub.alimama.com/fourth/protocol/common.htm?key=hangye_laxin
//        req.setSpecialId("2323");			会员运营ID
//        req.setRelationId("3243");			渠道关系ID，仅适用于渠道推广场景
//        req.setGetTopnRate(0L);			是否获取前N件佣金信息 0否，1是，其他值否
//        req.setBizSceneId("1");			1-动态ID转链场景，2-消费者比价场景（不填默认为1）；场景id使用说明参考《淘宝客新商品ID升级》白皮书：https://www.yuque.com/taobaolianmengguanfangxiaoer/zmig94/tfyt0pahmlpzu2ud
//        req.setPromotionType("2");			1-自购省，2-推广赚（代理模式专属ID，代理模式必填，非代理模式不用填写该字段）
//        req.setMgcStartTime("1695281620000");	线报内容筛选—内容生产开始时间，13毫秒时间戳
//        req.setMgcEndTime("1695281620000");	线报内容筛选—内容生产截止时间，13毫秒时间戳
//        req.setMgcStatus("0");			线报状态筛选，0-全部 1-过期 2-实时生效 3-未来生效 不传默认过滤有效
//        req.setUcrowdId(1L);			人群ID，仅适用于物料评估场景material_id=41377
//        TbkDgMaterialOptionalUpgradeRequest.Ucrowdrankitems obj1 = new TbkDgMaterialOptionalUpgradeRequest.Ucrowdrankitems();	物料评估-商品列表
//        obj1.setCommirate(1234L);			物料评估-商品佣金率，如：1234表示12.34%，material_id=41377时选填
//        obj1.setPrice("10.12");			物料评估-商品价格，单位：元，material_id=41377时选填
//        obj1.setItemId("qeqscd1231-uqwenqe");	物料评估-商品ID，material_id=41377时必填
//        req.setUcrowdRankItems(obj1);
    public TbkDgMaterialOptionalUpgradeResponse getTbkDgMaterialOptionalUpgradeRequest(){
        TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);
        TbkDgMaterialOptionalUpgradeRequest req = new TbkDgMaterialOptionalUpgradeRequest();

        TbkDgMaterialOptionalUpgradeResponse rsp = null;
        try {
            rsp = client.execute(req);
        } catch (ApiException e) {
            throw new RuntimeException(e);
        }
        System.out.println(rsp.getBody());
        return rsp;
    }
}
